package com.juc.cyclicbarrier.cyclicbarrier1;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class MyThread extends Thread{
	/**
	 * CountDownLatch 作用：一个线程或多个线程，等待另外一个或多个线程
	 * 完成某个事情之后才能继续执行.
	 * CyclicBarrier 作用： 多个线程之间相互等待，任何一个线程完成之前，
	 * 所有线程都必须等待，所以对于CyclicBarrier 来说，重点是“多个线程之间”
	 * 任何一个线程没有完成任务，则所有的线程必须等待.
	 */
	/**
	 * CyclicBarrier cbRef = new CyclicBarrier(5, new Runnable() {
				
				@Override
				public void run() {
					System.out.println(" 全都到了 ！");
				}
			});
			
		作用是设置最大为5个的parties同行者，也就是5个线程都执行了cbRef对象的await()方法后程序才可以继续
		向下运行，否则这些线程彼此互相等待，一直呈阻塞状态。
	 */
	private CyclicBarrier cbRef;
	
	public MyThread(CyclicBarrier cbRef) {
		super();
		this.cbRef = cbRef;
	}
	
	@Override
	public void run() {
		try {
			Thread.sleep((int) (Math.random() * 1000));
			System.out.println(Thread.currentThread().getName() + " 到了 ！" + System.currentTimeMillis() );
			cbRef.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (BrokenBarrierException e) {
			e.printStackTrace();
		}
	}

}
